package com.yboot.starter.mybatis.core.base.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yboot.starter.common.core.web.page.PageVO;
import com.yboot.starter.mybatis.core.base.query.PageQuery;

import javax.validation.Valid;
import java.io.Serializable;
import java.util.List;

/**
 * CRUD 业务接口
 *
 * @param <L> 列表类型
 * @param <D> 详情类型
 * @param <Q> 查询条件类型
 * @param <C> 创建或修改请求参数类型
 * @author yangcs
 * @date 2025/8/29
 */
public interface IBaseService<T, L, D, Q, C> extends IService<T> {

    /**
     * 分页查询列表
     *
     * @param query     查询条件
     * @return 分页列表信息
     */
    PageVO<L> queryPage(@Valid Q query);

    /**
     * 查询列表
     * @param query     查询条件
     * @return 列表信息
     */
    List<L> list(@Valid Q query);

    /**
     * 查询详情
     * @param id
     * @return
     */
    D detail(Serializable id);

    /**
     * 新增
     * @param r
     * @return
     */
    String saveInfo(@Valid C r);

    /**
     * 更新
     * @param r
     */
    void updateInfo(@Valid C r);

    /**
     * 删除
     */
    boolean delete(List<String> ids);
}
